package com.study.algorithm.linkedList;

public class SwapPairs {
    public ListNode swapPairs(ListNode head) {
        // 创建虚拟头节点，简化头节点交换的处理
        ListNode dummy = new ListNode(0);
        dummy.next = head;

        // prev指针初始指向虚拟头节点
        ListNode prev = dummy;

        // 循环条件：当前要交换的两个节点都存在
        while (prev.next != null && prev.next.next != null) {
            // 定义要交换的两个节点
            ListNode first = prev.next;
            ListNode second = prev.next.next;

            // 1. 保存second后面的节点（可能是null）
            ListNode temp = second.next;

            // 2. 进行节点交换
            prev.next = second;    // prev指向second
            second.next = first;  // second指向first
            first.next = temp;    // first指向原来second后面的节点

            // 3. 移动prev指针到下一组的前一个位置（即当前的first）
            prev = first;
        }

        // 返回新的头节点
        return dummy.next;
    }
}
